package at.spengergasse.dao.derby;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;

import java.sql.Connection;
import java.util.Date;
import java.util.List;

import org.junit.BeforeClass;
import org.junit.Test;

import at.spengergasse.dao.HerstellerDao;
import at.spengergasse.dao.util.JDBCConnectionController;
import at.spengergasse.model.Hersteller;

public class HerstellerDaoDerbyImplTest
{

	private static Connection connection;
	private static HerstellerDao dao;

	@BeforeClass
	public static void setUpBeforeClass() throws Exception
	{
		connection = JDBCConnectionController.getConnection();

		// connection = ConnectionPoolController.getConnection();
		dao = new HerstellerDaoDerbyImpl();
	}

	@Test
	public void testSaveNew()
	{
		Hersteller newHersteller = new Hersteller("ACP");
		int numberOfRecords = dao.save(connection, newHersteller);
		assertEquals(1, numberOfRecords); // return wert von der Methode
		// numberOfRecords
		assertNotNull(newHersteller.getId());
		assertNotNull(newHersteller.getLastModifiedTS());
		List<Hersteller> hersteller = dao.findAll(connection);
		// TODO syso auskommentieren
		assertEquals(11, hersteller.size());
	}

	@Test
	public void testSaveExisting()
	{
		Hersteller existingHersteller = dao.findById(connection, Long
				.valueOf(1));
		existingHersteller.setHersteller("Canon");
		Date lastModTS = existingHersteller.getLastModifiedTS();
		dao.save(connection, existingHersteller);
		assertFalse(lastModTS.equals(existingHersteller.getLastModifiedTS()));
		Hersteller checkHersteller = dao.findById(connection, Long.valueOf(1));
		assertEquals("Canon", checkHersteller.getHersteller());
	}

	@Test
	public void testDelete()
	{
		Hersteller hersteller = dao.findById(connection, Long.valueOf(10));
		dao.delete(connection, hersteller);
		List<Hersteller> kundeHersteller = dao.findAll(connection);
		assertEquals(10, kundeHersteller.size());
	}

	@Test
	public void testFindById()
	{
		Hersteller hersteller = dao.findById(connection, Long.valueOf(3));
		assertEquals("IBM", hersteller.getHersteller());

	}

	@Test
	public void testFindByIdWithNonExistingId()
	{
		Hersteller hersteller = dao.findById(connection, Long.valueOf(999));
		assertNull(hersteller);
	}

	@Test
	public void testFindAll()
	{
		List<Hersteller> hersteller = dao.findAll(connection);
		assertEquals(10, hersteller.size());
		// System.out.println(kunde.toString());
		assertEquals("Canon", hersteller.get(0).getHersteller());
		assertEquals("Samsung", hersteller.get(1).getHersteller());
		assertEquals("IBM", hersteller.get(2).getHersteller());
		System.out.println(hersteller.toString());
	}

}
